package com.wy2.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.transaction.Transactional;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.wy2.entity.Module;
import com.wy2.entity.Permission;
import com.wy2.mapper.PermissionMapper;
import com.wy2.service.PermissionService;
import com.wy2.util.FenyeUtil;

@Transactional
@Service
public class PermissionServiceImpl implements PermissionService {
	@Autowired
	private PermissionMapper pr;

	/**
	 * 添加
	 */
	@Override
	public Permission add(Permission per) {
		return pr.add(per);
	}
	/**
	 * 修改
	 */
	@Override
	public Integer update(Permission per) {
		return pr.update(per);
	}
	/**
	 * 删除
	 */
	@Override
	public Integer del(String ids) {
		return pr.delete(ids);
	}
	/**
	 * 设置具体权限
	 */
	@Override
	public Object getPermission(Permission per) {
		// 调用查询所有的分类
		List<Permission> tlist = pr.findAll();
		System.out.println("权限数据："+tlist);
		List<Permission> Per = new ArrayList<Permission>();
		for (Permission t : tlist) {
			if (t.getParentid().equals("0")) { // 找0的找的是父节点
				// 递归 一直寻找下一个子节点
				Per.add(findChildren(t, tlist));
			}
		}
		return Per;
	}

	public Permission findChildren(Permission t, List<Permission> tlist) {
		for (Permission item : tlist) {
			// 你的parentid 与顶级父节点id 相等 说明你是我儿子 我是你爸爸
			if (t.getId().equals(item.getParentid())) {
				if (t.getChildren() == null) {
					// 集合里面没有东西 子集合里面也没有东西 把值塞进数组里面
					t.setChildren(new ArrayList<Permission>());
				}
				// 把子节点填入到父节点的集合里面
				t.getChildren().add(findChildren(item, tlist));
			}

		}
		return t; // 返回对的是一个一级的节点
	}
	/**
	 * 根据id获取全部
	 */
	@Override
	public List<Integer> getById(String rid) {
		return pr.getById(rid);
	}
    /**
     * 设置给角色设置具体权限
     */
	@Override
	public Map<String, Object> deleteRidPid(String rid, List<String> pid) {
		Map<String, Object> map = new HashMap<>();
		pr.deleteRidByid(rid); // 先根据角色id删除所有数据
		Integer addnum = 0;
		for (int i = 0; i < pid.size(); i++) {
			String setid = pid.get(i);
			addnum = pr.addRidPid(rid, setid); // 删除后再添加
		}
		if (addnum != 0) {
			map.put("code", 0);
			map.put("msg", "设置成功");
			return map;
		} else {
			map.put("code", 1);
			map.put("msg", "设置失败");
			return map;
		}
	}
/**
 * 根据id获取全部
 */
	@Override
	public List<Permission> getAll(String id) {
		return pr.getAll(id);
	}
/**
 * 根据标题，id查询
 */
	@Override
	public List<Permission> getAllByPvalue(String id, String pvalue) {
		return pr.getAllByPvalue(id, pvalue);
	}
   /**
    * 根据id获取全部
    */
	@Override
	public Permission getPer(String id) {
		return pr.getPer(id);
	}
	@Override
	public FenyeUtil<Permission> getAll(FenyeUtil<Permission> fenye) {
		List<Permission> data=pr.getAlls(fenye);
		Integer count=pr.getCount(fenye);
		if(data.size()!=0) {
			fenye.setCount(count);
			fenye.setData(data);
		}else {
			fenye.setCode(1);
			fenye.setMsg("无数据");
		}
		
		return fenye;
	}

}
